typedef char* va_list;

void Write(char* buf,int i){
     __asm__ __volatile__(
            "lw      a5,-20(s0)\n"
            "\tmv      a0, a5\n"
            "\tli      a7, 4\n"
            "\tecall\n"
        );
}

int Vsprintf(char *buf, const char *fmt, va_list args)
{
    char* p;
    char tmp[256];
    va_list p_next_arg = args;

    for (p = buf; *fmt; fmt++)
    {
        if (*fmt != '%')
        {
            *p++ = *fmt;
            continue;
        }

        fmt++;

        if (*fmt == 'd'){
            int k = *((int *)p_next_arg); 
            char s[256];
            int i = 0; 
            while(k){
                s[i++] =  k%10 + '0';
                k = k/10;
            }
            s[i] = 0;
            for(i;i>0;i--)
            {
                *p++ = s[i-1];
            }    
            p_next_arg = (va_list)((int *)(p_next_arg) + 2);
        }
    }
    *p = 0;
    return (p - buf);
} 

int Printf(const char *fmt, ...) 
{ 
    int i; 
    char buf[256]; 
    va_list arg = (va_list)(( (int *)( &fmt )+ 2 )); 
    i = Vsprintf(buf, fmt, arg); 
    // cout<<buf<<endl;
    Write(buf, i); 
    return i; 
}
// #include<stdio.h>

int main()
{
    int i, F1 = 1, F2 = 1, tmp;
    for ( i = 3; i <= 10; i++ ) {
        F1 = F1 + F2;
        tmp = F1;
        F1 = F2;
        F2 = tmp;
    }
    Printf( "The tenth item is:%d %d" ,F2,F1 );
    return  0;
}

// Write(char*, int):
//  addi	sp,sp,-32
//  sw	s0,28(sp)
//  addi	s0,sp,32
//  sw	a0,-20(s0)
//  sw	a1,-24(s0)
//  nop
//  lw	s0,28(sp)
//  addi	sp,sp,32
//  ret
// Vsprintf(char*, char const*, char*):
//  addi	sp,sp,-560
//  sw	s0,556(sp)
//  addi	s0,sp,560
//  sw	a0,-548(s0)
//  sw	a1,-552(s0)
//  sw	a2,-556(s0)
//  lw	a5,-556(s0)
//  sw	a5,-24(s0)
//  lw	a5,-548(s0)
//  sw	a5,-20(s0)
//  lw	a5,-552(s0)
//  lbu	a5,0(a5)
//  beqz	a5,10266 <Vsprintf(char*, char const*, char*)+0x11e>
//  lw	a5,-552(s0)
//  lbu	a4,0(a5)
//  li	a5,37
//  beq	a4,a5,101a2 <Vsprintf(char*, char const*, char*)+0x5a>
//  lw	a5,-20(s0)
//  addi	a4,a5,1
//  sw	a4,-20(s0)
//  lw	a4,-552(s0)
//  lbu	a4,0(a4)
//  sb	a4,0(a5)
//  j	1025a <Vsprintf(char*, char const*, char*)+0x112>
//  lw	a5,-552(s0)
//  addi	a5,a5,1
//  sw	a5,-552(s0)
//  lw	a5,-552(s0)
//  lbu	a4,0(a5)
//  li	a5,100
//  bne	a4,a5,1025a <Vsprintf(char*, char const*, char*)+0x112>
//  lw	a5,-24(s0)
//  lw	a5,0(a5)
//  sw	a5,-28(s0)
//  sw	zero,-32(s0)
//  lw	a5,-28(s0)
//  beqz	a5,1020c <Vsprintf(char*, char const*, char*)+0xc4>
//  lw	a4,-28(s0)
//  li	a5,10
//  rem	a5,a4,a5
//  zext.b	a4,a5
//  lw	a5,-32(s0)
//  addi	a3,a5,1
//  sw	a3,-32(s0)
//  addi	a4,a4,48
//  zext.b	a4,a4
//  addi	a3,s0,-16
//  add	a5,a5,a3
//  sb	a4,-528(a5)
//  lw	a4,-28(s0)
//  li	a5,10
//  div	a5,a4,a5
//  sw	a5,-28(s0)
//  j	101ca <Vsprintf(char*, char const*, char*)+0x82>
//  lw	a5,-32(s0)
//  addi	a4,s0,-16
//  add	a5,a5,a4
//  sb	zero,-528(a5)
//  lw	a5,-32(s0)
//  blez	a5,10250 <Vsprintf(char*, char const*, char*)+0x108>
//  lw	a5,-32(s0)
//  addi	a4,a5,-1
//  lw	a5,-20(s0)
//  addi	a3,a5,1
//  sw	a3,-20(s0)
//  addi	a3,s0,-16
//  add	a4,a4,a3
//  lbu	a4,-528(a4)
//  sb	a4,0(a5)
//  lw	a5,-32(s0)
//  addi	a5,a5,-1
//  sw	a5,-32(s0)
//  j	1021a <Vsprintf(char*, char const*, char*)+0xd2>
//  lw	a5,-24(s0)
//  addi	a5,a5,4
//  sw	a5,-24(s0)
//  lw	a5,-552(s0)
//  addi	a5,a5,1
//  sw	a5,-552(s0)
//  j	1016e <Vsprintf(char*, char const*, char*)+0x26>
//  lw	a5,-20(s0)
//  sb	zero,0(a5)
//  lw	a4,-20(s0)
//  lw	a5,-548(s0)
//  sub	a5,a4,a5
//  mv	a0,a5
//  lw	s0,556(sp)
//  addi	sp,sp,560
//  ret
// Printf(char const*, ...):
//  addi	sp,sp,-336
//  sw	ra,300(sp)
//  sw	s0,296(sp)
//  addi	s0,sp,304
//  sw	a0,-292(s0)
//  sw	a1,4(s0)
//  sw	a2,8(s0)
//  sw	a3,12(s0)
//  sw	a4,16(s0)
//  sw	a5,20(s0)
//  sw	a6,24(s0)
//  sw	a7,28(s0)
//  addi	a5,s0,-292
//  addi	a5,a5,4
//  sw	a5,-20(s0)
//  lw	a4,-292(s0)
//  addi	a5,s0,-280
//  lw	a2,-20(s0)
//  mv	a1,a4
//  mv	a0,a5
//  jal	10148 <Vsprintf(char*, char const*, char*)>
//  sw	a0,-24(s0)
//  addi	a5,s0,-280
//  lw	a1,-24(s0)
//  mv	a0,a5
//  jal	10132 <Write(char*, int)>
//  lw	a5,-24(s0)
//  mv	a0,a5
//  lw	ra,300(sp)
//  lw	s0,296(sp)
//  addi	sp,sp,336
//  ret
// main:
//  addi	sp,sp,-32
//  sw	ra,28(sp)
//  sw	s0,24(sp)
//  addi	s0,sp,32
//  li	a5,1
//  sw	a5,-24(s0)
//  li	a5,1
//  sw	a5,-28(s0)
//  li	a5,3
//  sw	a5,-20(s0)
//  lw	a4,-20(s0)
//  li	a5,10
//  blt	a5,a4,1033c <main+0x56>
//  lw	a4,-24(s0)
//  lw	a5,-28(s0)
//  add	a5,a5,a4
//  sw	a5,-24(s0)
//  lw	a5,-24(s0)
//  sw	a5,-32(s0)
//  lw	a5,-28(s0)
//  sw	a5,-24(s0)
//  lw	a5,-32(s0)
//  sw	a5,-28(s0)
//  lw	a5,-20(s0)
//  addi	a5,a5,1
//  sw	a5,-20(s0)
//  j	10300 <main+0x1a>
//  lw	a2,-24(s0)
//  lw	a1,-28(s0)
//  lui	a5,0x10
//  addi	a0,a5,1360 # 10550 <__errno+0x8>
//  jal	10286 <Printf(char const*, ...)>
//  li	a5,0
//  mv	a0,a5
//  lw	ra,28(sp)
//  lw	s0,24(sp)
//  addi	sp,sp,32
//  ret
// atexit:
//  mv	a1,a0
//  li	a3,0
//  li	a2,0
//  li	a0,0
//  j	10420 <__register_exitproc>
// exit:
//  addi	sp,sp,-16
//  li	a1,0
//  sw	s0,8(sp)
//  sw	ra,12(sp)
//  mv	s0,a0
//  jal	1047e <__call_exitprocs>
//  lw	a0,-984(gp) # 11a50 <_global_impure_ptr>
//  lw	a5,60(a0)
//  beqz	a5,10378 <exit+0x16>
//  jalr	a5
//  mv	a0,s0
//  jal	10528 <_exit>
// memset:
//  mv	t1,a0
//  beqz	a2,1041e <memset+0xe>
//  sb	a1,0(t1)
//  addi	a2,a2,-1
//  addi	t1,t1,1
//  bnez	a2,10414 <memset+0x4>
//  ret
// _exit:
//  li	a7,93
//  ecall
//  bgez	a0,10546 <_exit+0x1e>
//  addi	sp,sp,-16
//  sw	s0,8(sp)
//  mv	s0,a0
//  sw	ra,12(sp)
//  neg	s0,s0
//  jal	10548 <__errno>
//  sw	s0,0(a0)
//  j	10544 <_exit+0x1c>
//  j	10546 <_exit+0x1e>